RubyKaigi 2022 Day 2 Make RuboCop super fast
自己紹介
ESM, Inc.
RuboCop core team
Linter / Formatter
Rubocop 10周年
コントリビューションランキング1位
Rubocop 2を開発中
Rubocop 2x2
Rubocopを倍速にする
速くなって困る人はいない
Caching
結構前からある
~/.cache/rubocop_cache
cache=falseしないかぎりON
Multi-cores
--parallel option
Reduce unused required
--only option
Daemonize
require 'rubocop/server'
850倍速くなる
Servermode
Past and Current
CLI
require 'rubocop'が遅い
起動時に毎回requireするので遅い
gem rubocop-daemon
by @fohte
Client/Server model
Server
Modules are loaded only once during boot process
Client
Connects server
code:bash
rubocop-daemon start
rubocop-daemon exec
rubocop-daemon exec
gem rubocop-daemon-wrapper
rubocopでdaemonが起動してなかったらrubocop-daemon startするラッパー
Rubocopにrubocop-daemon取り入れたらいいじゃね?という議論がGitHub Discussionで進んでいた
最近統合された
code:bash
rubocop --server
require 'rubocop/server'で必要なmoduleのみrequire
require 'rubocop'よりも速い
exe/rubocop
after v1.31
サーバーが起動していなかったらサーバーを起動する
サーバーが起動していたらサーバーに実行させる
サーバーが起動しなかったときだけ従来のCLIで実行する
CLI API design
rubocop --server vs rubocop-server
rubocop-serverみたいな別コマンドにはしたくなかった
rubocop-daemon-wrapperがある時点でみんなrubocop自体を速くしたい雰囲気
rubocop --no-server
後方互換
rubocop --server
rubocop -sはすでにある
rubocop --serverを実行したディレクトリごとにサーバーが起動する
rubocop --start-server
環境変数
$RUBOCOP_SERVER_HOST
$RUBOCOP_SERVER_PORT
rubocop --stop-server
bundle updateでgemのUpdate時とかに不安定になる
rubocop --restart-server
rubocop --server-status
rubocop -V
Server process
.cache/rubocop_cache/serverにPIDやport、versionがある
Future
auto-reload 3rd party gems
Support JRuby
Rubocop Option file
code:.rubocop_opts
--server